﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////


#pragma once

#include "GmFamilyService.h"
#include "IParameterCustomData.h"
#include "UniIdentity.h"

namespace gfam
{
    class TextStyle;

    /// \brief 富文本自定义数据
    class GM_FAMILY_SERVICE_EXPORT ITextStyleCustomData : public gcmp::IParameterCustomData
    {
        DEFINE_CAST_DERIVED(ITextStyleCustomData, gcmp::IParameterCustomData);
    public:
        /// \brief 创建一个默认的富文本数据对象
        /// \return OwnerPtr<ITextStyleCustomData> 创建的对象
        static gcmp::OwnerPtr<ITextStyleCustomData> Create();

        /// \brief 根据TextStyle创建一个富文本数据对象
        /// \return OwnerPtr<ITextStyleCustomData> 创建的对象
        static gcmp::OwnerPtr<ITextStyleCustomData> Create(const TextStyle* pTextStyle);

        /// \brief 获取文字样式名称
        /// \return std::wstring 文字样式名称
        virtual const std::wstring& GetStyleName() const = 0;

        /// \brief 设置文字样式名称
        /// \param name 文字样式名称
        /// \return void
        virtual void SetStyleName(const std::wstring& name) = 0;

        /// \brief 获取文字名称
        /// \return std::wstring 文字名称
        virtual const std::wstring& GetFontName() const = 0;

        /// \brief 设置字体名称
        /// \param name 字体名称
        /// \return void
        virtual void SetFontName(const std::wstring& name) = 0;

        /// \brief 获取文字高度
        /// \return double 文字高度
        virtual double GetFontHeight() const = 0;

        /// \brief 设置文字高度
        /// \param height 文字高度
        /// \return void
        virtual void SetFontHeight(double height) = 0;

        /// \brief 获取文字颜色
        /// \return Color 文字颜色
        virtual gcmp::Color GetFontColor() const = 0;

        /// \brief 设置文字颜色
        /// \param color 文字高度
        /// \return void
        virtual void SetFontColor(const gcmp::Color& color) = 0;

        /// \brief 获取文字是否加粗
        /// \return bool 文字是否加粗， true 加粗, false 不加粗
        virtual bool GetBold() const = 0;

        /// \brief 设置文字是否加粗
        /// \param value 文字是否加粗， true 加粗, false 不加粗
        /// \return void
        virtual void SetBold(bool value) = 0;

        /// \brief 获取文字是否为斜体
        /// \return bool 文字是否为斜体， true 斜体, false 非斜体
        virtual bool GetItalic() const = 0;

        /// \brief 设置文字是否为斜体
        /// \param value 文字是否为斜体， true 斜体, false 非斜体
        /// \return void
        virtual void SetItalic(bool value) = 0;

        /// \brief 获取文字是否包含下划线
        /// \return bool 文字是否包含下划线， true 包含, false 不包含
        virtual bool GetUnderLine() const = 0;

        /// \brief 设置文字是否包含下划线
        /// \param value 文字是否包含下划线， true 包含, false 不包含
        /// \return void
        virtual void SetUnderLine(bool value) = 0;

        /// \brief 获取文字行间距
        /// \return double 文字行间距
        virtual double GetRowSpacing() const = 0;

        /// \brief 设置文字行间距
        /// \param value 文字行间距
        /// \return void
        virtual void SetRowSpacing(double value) = 0;

        /// \brief 获取字符间距
        /// \return double 字符间距
        virtual double GetCharSpacing() const = 0;

        /// \brief 设置字符间距
        /// \param value 字符间距
        /// \return void
        virtual void SetCharSpacing(double value) = 0;

        /// \brief 获取文字边框宽度
        /// \return double 边框宽度
        virtual double GetFrameGap() const = 0;

        /// \brief 设置边框宽度
        /// \param value 边框宽度
        /// \return void
        virtual void SetFrameGap(double value) = 0;

        /// \brief 获取文字宽高比
        /// \return double 文字宽高比
        virtual double GetWidthFactor() const = 0;

        /// \brief 设置文字宽高比
        /// \param value 文字宽高比
        /// \return void
        virtual void SetWidthFactor(double value) = 0;

        /// \brief 获取是否使用SmartColor
        /// \return bool 是否使用SmartColor。 true 使用，false不使用
        virtual bool GetSmartColor() const = 0;

        /// \brief 设置是否使用SmartColor
        /// \param value 是否使用SmartColor。 true 使用，false不使用
        /// \return void
        virtual void SetSmartColor(bool value) = 0;

        /// \brief 获取简单字体名称
        /// \return wstring 简单字体名称(xxx.shx)
        virtual const std::wstring& GetShxSimpleFontName() const = 0;

        /// \brief 设置简单字体名称
        /// \param name 简单字体名称
        /// \return void
        virtual void SetShxSimpleFontName(const std::wstring& name) = 0;

        /// \brief 获取大字体名称
        /// \return wstring 大字体名称(xxx.shx)
        virtual const std::wstring& GetShxBigFontName() const = 0;

        /// \brief 设置大字体名称
        /// \param name 大字体名称
        /// \return void
        virtual void SetShxBigFontName(const std::wstring& name) = 0;

        /// \brief 获取是否使用单线体
        /// \return bool 是否使用单线体， true 使用， false不使用
        virtual const bool GetIsMutiShxFont() const = 0;

        /// \brief 设置是否使用单线体
        /// \param isMuti 是否使用单线体， true 使用， false不使用
        /// \return void
        virtual void SetIsMutiShxFont(const bool& isMuti) = 0;
    };
}
